【レポート】深層強化学習を用いたボットの効率的な作成方法について学ぶ #CEDEC2023 #classmethod_game
CEDEC2023に参加してきました。 聴講したセッション『Efficient creation of player bots using Deep Reinforcement Learning/深層強化学習を用いたプレイヤーボットの効率的な作成』についてレポートします。
3Dのアクションゲームなどで利用する複雑な動きが可能なボットについて、深層強化学習を用いた効果的な作成ノウハウについて学ぶことができました。
セッション概要
この講演では、ゲーム体験を向上させるプレイヤーボットを作成するための深層強化学習(Deep RL)のアプリケーションを探ります。注目すべきは、深層強化学習のボットは、スクリプトでは難しい(あるいは不可能な)ことができることです。また、最も重要なことは、これらのボットは「合理的な」時間と予算の制約のもとで訓練できるため、ビデオゲーム制作の実現可能性を高めていることです。リアルなプレイヤー体験が得られるナビゲーション、行動指定、複雑な戦闘といった課題への取り組みについて、最近発表した3つの研究論文を基に掘り下げていきます。私たちの手法は『アサシン・クリード』『ファークライ』『R7』『フォーオナー』において、テストやゲームのプレイにおいて使用されています。これらの成果をゲーム内で活用した事例を動画でいくつかご紹介します。
※ 『Efficient creation of player bots using Deep Reinforcement Learning/深層強化学習を用いたプレイヤーボットの効率的な作成』セッションページより引用
ポイントと感じた点
ゲーム開発におけるボットの必要性
ゲーム開発においてボットがなぜ必要なのか確認しました。
テストボットとプレイングボットの2種があり、以下の役割があることが分かりました。
- テストボット
- 到達可能性の確認
- バランス調整
- 機能のテスト
- プレイングボット
- オンボーディング
- 対戦相手
- 離脱したプレイヤーの代わり
強化学習の必要性
上記の理由で、プレイヤーボットは重要ですが、ゲームが複雑なほど人間のプレイヤーに近い動きをするボットの作成は困難になることを学びました。
例えば、古典的な手法では、経路の探索にはナビゲーションメッシュを用います。この場合、ジャンプパートやダブルジャンプなど特殊なパスが登場すると、どんどんと問題が複雑になってしまいます。
強化学習では「どうやるかではなく、何を達成するか」というより抽象的な課題を設定できるため、ボットにさせたい目的を設定しやすくなります。
深層強化学習モデルと学習方法について
人間が行う操作と類似の入力を目指し、以下のようなニューラルネットを作成して訓練したことをご紹介頂きました。
特にニューラルネットへの入力として、キャラクターの位置などの情報と深度マップが使ったことが分かりました。
学習の効率化としてはマルチエージェントで複数マシンで訓練し、報酬もMain reward・Dense reward・Behavioral preferencesの3段階を用意したことも参考になりました。(以降、深層強化学習の文脈でボットの学習の際の個々のトライアルに登場するボットのことをエージェントと記載します。)
以下はセッション内で紹介頂いた参考資料です。類似ケースにおける論文とUbisoft社のブログになります。
制約付き強化学習について
エージェントの訓練で必要になる手法である、制約付き強化学習について具体的な例を知ることができました。
エージェントのカスタマイズでは、強化学習を計画する際の報酬の設計は難しいポイントです。報酬の設計によっては、学習時にペナルティが大きくなってしまい、エージェントが学習をやめてしまうことがあるためです。このような場合に制約付き強化学習が利用できます。
例えば、99%の割合で溶岩を避ける・特定の向きを向くなどといった制限を加えた状態での学習が可能になります。以下は制約付きでエージェントが学習している様子です。
以下もセッション内で紹介頂いた参考資料です。制約付き強化学習についての、論文とUbisoft社のブログになります。
深層強化学習のメリットと課題
深層強化学習によるボットの作成では、「戦いに勝つ」というようなより抽象的な課題設定をすることができる点がポイントであることが分かりました。
一方で、以下のような課題もありました。
- ある特定の条件で狙った特定の行動を得ることは難しい(調整しにくい)。
- データが大量に必要になる。
- マシンが大量に必要になる。
比較対象となるのは機械学習手法としては古典的な手法である決定木ですが、どのような行動でも望み通りに振る舞わせることができ、修正が分かりやすく、他のキャラクターへの転用も可能です。一方で、行動を読まれてしまいやすいような課題もあります。
ある特定の条件で取りたい行動が決まっている場合は決定木のような手法を使うという使い分けもまた可能です。
League Frameworkについて
より効果的にエージェントを訓練するためのLeague Frameworkについて学ぶことができました。
相手を変えてエージェントをトレーニングする手法です。例えば、エージェントを相手と戦わせて、ある一定の勝率まで上がってきたらモデルを凍結し、第1世代とします。対戦相手に第1世代のモデルを加え、第2世代のモデルを続きから学習していく、というようにモデルを進化させていきます。
凍結したモデルと戦って訓練したExploiterを導入し、さらに学習を進める方法についても解説して頂きました。
Exploiterの学習に時間がかかる課題を解決するために開発した、Smart Exploiterについても紹介がありました。Smart Exploiterはエージェントの状況を知ることができ、それを報酬として効率よくエージェントを学習させる手助けをするそうです。エージェントは自分の弱点を突くより強い相手と訓練することでより効率よく学習ができます。
感想
少し高度な深層強化学習のテーマでしたが、この分野に精通していなくても分かりやすい内容と、具体的なゲーム中のボットの学習の様子をお見せ頂いたのでイメージが掴みやすかったです。
機械学習モデルの構造に加えて、マルチエージェントやLeague Frameworkによる効果的な学習についても学ぶことができました。
試してみるとすると、kaggleでもゲーム用のボットの開発をテーマにしたコンペが開催されるので、確認してみてみるとイメージが湧きそうです。
また、私はAWSに知見があるので、例えばAWSで試すとするとAmazon SageMaker RLにUnity上での強化学習エージェントの作成のブログ記事がありました。AWS環境をお持ちの方であればこのあたりから資料を見ていって自業務に取り入れられるか確認してみるのも良いかもしれません。
最後に
CEDEC2023のセッション『Efficient creation of player bots using Deep Reinforcement Learning/深層強化学習を用いたプレイヤーボットの効率的な作成』についてのレポートしでした。
ゲーム画面での、具体的なボットやエージェントの動作映像を交えつつの説明だったので、難しいながらもとても理解しやすいセッションでした。